package api

import (
	"github.com/labstack/echo/v4"
	"longmen/server/pkg/common/helper/const"
	"longmen/server/pkg/common/helper/util"
	"longmen/server/pkg/grpc_client"
	"longmen/server/pkg/protobuf"
)

// @Summary 世界杯分组比赛列表
// @Description 世界杯分组比赛列表
// @Accept  json
// @Produce  json
// @Tags Sport
// @Param   sendBody body protobuf.WCGroupMatchReq true "body"
// @Success 200 object  protobuf.WCGroupMatchResp "result"
// @Router /api/sport/world_cup_group_match [POST]
func (base *Controller) WCGMatch(c echo.Context) error {
	r := &protobuf.WCGroupMatchReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.WCGroupMatch(ctx, r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 世界杯分组积分榜
// @Description 世界杯分组积分榜
// @Accept  json
// @Produce  json
// @Tags Sport
// @Param   sendBody body protobuf.WCTeamPointReq true "body"
// @Success 200 object  protobuf.WCGroupMatchResp "result"
// @Router /api/sport/world_cup_team_point [POST]
func (base *Controller) WCTeamPoint(c echo.Context) error {
	r := &protobuf.WCTeamPointReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.WCTeamPoint(ctx, r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 世界杯分组进阶榜
// @Description 世界杯分组进阶榜
// @Accept  json
// @Produce  json
// @Tags Sport
// @Success 200 object  protobuf.WCGroupMatchResp "result"
// @Router /api/sport/world_cup_team_rank [POST]
func (base *Controller) WCTeamRank(c echo.Context) error {
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.WCTeamRank(ctx, &protobuf.Empty{})
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 世界杯竞猜组
// @Description 世界杯竞猜组
// @Accept  json
// @Produce  json
// @Tags Sport
// @Success 200 object  protobuf.WCGroupMatchResp "result"
// @Router /api/sport/world_cup_game_team [POST]
func (base *Controller) WCGameTeam(c echo.Context) error {
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.WCGameTeam(ctx, &protobuf.Empty{})
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 世界杯竞猜下单
// @Description 世界杯竞猜下单
// @Accept  json
// @Produce  json
// @Tags Sport
// @Param   sendBody body protobuf.WCGameOrderReq true "body"
// @Success 200 object  protobuf.WCGroupMatchResp "result"
// @Router /api/sport/world_cup_game_order [POST]
func (base *Controller) WCGameOrder(c echo.Context) error {
	user, err := base.GetUserByCtx(c)
	if err != nil {
		return util.BuildLoginTimeOut(c, err)
	}
	r := &protobuf.WCGameOrderReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	r.UserId = int64(user.Id)
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.WCGameOrder(ctx, r)
	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 世界杯竞猜下单列表
// @Description 世界杯竞猜下单列表
// @Accept  json
// @Produce  json
// @Tags Sport
// @Param   sendBody body protobuf.WCGameOrderListReq true "body"
// @Success 200 object  protobuf.WCGroupMatchResp "result"
// @Router /api/sport/world_cup_game_order_list [POST]
func (base *Controller) WCGameOrderList(c echo.Context) error {
	user, err := base.GetUserByCtx(c)
	if err != nil {
		return util.BuildLoginTimeOut(c, err)
	}
	r := &protobuf.WCGameOrderListReq{}
	if err := util.Json2Struct(c.Get("body").(string), r); err != nil {
		return util.BadParam(c, err)
	}
	r.UserId = int64(user.Id)
	ctx, cancel := base.GrpcWithTimeout()
	defer cancel()
	resp, err := grpc_client.GrpcSportServer.WCGameOrderList(ctx, r)

	if err != nil {
		return util.BuildFail(c, _const.RPC_FAILED, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}
